package cn.tedu.charging.user.controller;

import cn.tedu.charging.common.pojo.JsonResult;
import cn.tedu.charging.common.pojo.vo.UserInfoVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import java.math.BigDecimal;

@Slf4j
@RequestMapping("/user")
@RestController
@Api(tags = "用户接口")
public class UserController {

    /**
     * 通过用户id获取车辆信息
     * @param userId
     * @return JsonResult
     */
    @ApiOperation("获取用户信息")
    @GetMapping("/info/{userId}")
    public JsonResult getUserInfo(@PathVariable("userId") Integer userId){
        log.debug("获取用户信息-{}",userId);
        UserInfoVO userInfoVO = new UserInfoVO();
        userInfoVO.setCarId(11);

        return JsonResult.ok(userInfoVO);
    }

    /**
     * 通过用户id获取用户余额     12.3 MqttConsumer里需要查询用户余额，这儿就补了个方法
     * @param userId
     * @return JsonResult
     */
    @ApiOperation("获取用户余额")
    @GetMapping("/balance/{userId}")
    public JsonResult getUserBalance(@PathVariable("userId") Integer userId){
        log.debug("获取用户余额-{}",userId);
        //todo 通过用户id去用户表查询用户余额 charging_user_info表里的余额balance
        BigDecimal balance = new BigDecimal(10000); //金额嘛，用BigDecimal类型了，假数据
        return JsonResult.ok(balance);
    }



    /**
     * 通过用户id获取用户绑定的车辆信息
     * 先假定一个用户只能绑定一辆车 充电的时候就是用户绑定的那辆唯一的车
     * 如果后续功能迭代 充电的时候由用户选择给哪辆车充电, 车的id可以通过入参的方式传入
     * @param userId
     * @return
     */
    /*  这个是飞书，第3天负载均衡的getCarInfo 方式调用chooseUrl 方法返回URL 通过RestTemplate 调用用户服务的代码。。不知道啥时候改
    private CarInfoDto getCarInfo(Long userId) {
        String url = chooseUrl();
        log.debug("通过restTemplate调用用户接口获取用户信息-获取url:{}",url);
        //String url = "http://localhost:8083/user/info/"+userId;
        log.debug("通过restTemplate调用用户接口获取用户信息-入参:{}",userId);
        ParameterizedTypeReference<JsonResult<UserInfoVO>> reposeBody =
                new ParameterizedTypeReference<JsonResult<UserInfoVO>>() {
                };
        ResponseEntity<JsonResult<UserInfoVO>> entity =
                restTemplate.
                        exchange(url,
                                HttpMethod.GET,
                                null,
                                reposeBody,
                                userId);
        log.debug("通过restTemplate调用用户接口获取用户信息-入参:{},出参:{}",userId,entity);

        if(entity != null) {
            HttpStatus statusCode = entity.getStatusCode();
            if (HttpStatus.OK == statusCode) {
                JsonResult<UserInfoVO> body = entity.getBody();
                UserInfoVO data = body.getData();
                log.debug("通过restTemplate调用用户接口获取用户信息-入参:{},body:{}",userId,body);
                CarInfoDto carInfoDto = new CarInfoDto();
                Integer carId = data.getCarId();
                carInfoDto.setCarId(carId); //如果参数少可以同手动设置
                BeanUtils.copyProperties(data,carInfoDto);
                return carInfoDto;
            }
        }

//        CarInfoDto carInfoDto = new CarInfoDto();
//        carInfoDto.setCarId(15);
//        return carInfoDto;
        return null;
     }
     */

}
